#include <iostream>
using namespace std;
class A {};
class B { 
		public: 
				B(){};
				B(A a) {cout << "constuctor" << endl;} 
			//	B(A& a) {cout << "copy constuctor" << endl;} //ambiguous
				B operator=(A a) {cout << "conversion assignment" << endl; 
						A &b=a;
						return b;}
				B operator=(B b) {cout << "copy assignment" << endl; 
						return b;}

};

void foo(B b){
cout << "a B object has been copied before entered this function" << endl;
}

int main () {
A a;
B b=a, b1(a);
b=a;
B c;
c=a;
cout << "c=b" << endl;
c=b;
cout << "*********" << endl;
foo(c); //implicit copy???
return 0;
}
